package top.arryweb.application.common.utils;

import java.util.Collection;
import java.util.Map;

/**
 * @Description 字符串工具类
 * @Author mac
 * @Date 2021/6/20
 **/
public class StringUtils extends org.apache.commons.lang3.StringUtils {

  /**
   * 空字符串
   */
  private static final String NULLSTR = "";

  /**
   * 下划线
   */
  private static final char SEPARATOR = '_';

  /**
   * 获取参数不为空
   */
  public static <T> T nvl(T value, T defaultValue) {
    return value != null ? value : defaultValue;
  }

  /**
   * 判断一个对象是否为空
   */
  public static boolean isNull(Object object) {
    return object == null;

  }

  /**
   * 判断一个对象是否非空
   */
  public static boolean isNotNull(Object object) {
    return !isNull(object);
  }

  /**
   * 判断一个Collection是否为空，包含List、Set、Queue
   */
  public static boolean isEmpty(Collection<?> coll) {
    return isNull(coll) || coll.isEmpty();
  }

  /**
   * 判断一个Collection是否非空，包含List、Set、Queue
   */
  public static boolean isNotEmpty(Collection<?> coll) {
    return !isEmpty(coll);
  }

  /**
   * 判断一个对象是否为数组类型
   */
  public static boolean isArray(Object object) {
    return isNotNull(object) && object.getClass().isArray();
  }

  /**
   * 判断一个对象数组是否为空
   */
  public static boolean isEmpty(Object[] objects) {
    return isNull(objects) || (objects.length == 0);
  }

  /**
   * 判断一个对象数组是否非空
   */
  public static boolean isNotEmpty(Object[] objects) {
    return !isEmpty(objects);
  }

  /**
   * 判断一个Map是否为空
   */
  public static boolean isEmpty(Map<?, ?> map) {
    return isNull(map) || map.isEmpty();
  }

  /**
   * 判断一个Map是否非空
   */
  public static boolean isNotEmpty(Map<?, ?> map) {
    return !isEmpty(map);
  }

  /**
   * 判断一个字符串是否为空串
   */
  public static boolean isEmpty(String str) {
    return isNull(str) || NULLSTR.equals(str.trim());
  }

  /**
   * 判断一个字符串是否非空串
   */
  public static boolean isNotEmpty(String str) {
    return !isEmpty(str);
  }

  /**
   * 去空格
   */
  public static String trim(String str) {
    return (str == null ? "" : str.trim());
  }

  /**
   * 截取字符串
   * @param str 字符串
   * @param start 开始
   * @return 结果
   */
  public static String substring(final String str, int start) {
    if (str == null) {
      return NULLSTR;
    }
    if (start < 0) {
      start = str.length() + start;
    }
    if (start < 0) {
      start = 0;
    }
    if (start > str.length()) {
      return NULLSTR;
    }
    return str.substring(start);
  }
  /**
   * 截取字符串
   * @param str 字符串
   * @param start 开始
   * @param end 结束
   * @return 结果
   */
  public static String substring(final String str, int start, int end) {
    if (str == null) {
      return NULLSTR;
    }
    if (start < 0) {
      start = str.length() + start;
    }
    if (start < 0) {
      start = 0;
    }
    if (start > end) {
      return NULLSTR;
    }
    if (end < 0) {
      end = str.length() + end;
    }
    if (end < 0) {
      end = 0;
    }
    if (end > str.length()) {
      end = str.length();
    }
    return str.substring(start,end);
  }



}
